﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UtilLib.Misc
{
	/// <summary>
	/// 主要用于通过位运算实现权限管理
	/// </summary>
	/// <remarks>
	/// 为了通过泛型增强条件约束，代码中使用了dynamic，导致性能比直接用数字进行位运算要低。
	/// </remarks>
	public class BitOperation
	{
		public static bool HasFlag<T>(T value, T flag)
		{
			return (value & (dynamic)flag) == flag;
		}

		public static void SetFlag<T>(ref T value, T flag)
		{
			value = value | (dynamic)flag;
		}

		public static void ResetFlag<T>(ref T value, T flag)
		{
			value = value & (~(dynamic)flag);
		}
	}
}
